import java.util.regex.Pattern;

/**
 * 测试专业名称匹配逻辑
 */
public class MajorNameMatchingTest {
    
    // 去除专业名称中括号及其内容的正则表达式
    private static final Pattern MAJOR_NAME_PATTERN = Pattern.compile("\\([^)]*\\)");
    
    /**
     * 去除专业名称中的括号及其内容
     */
    public static String removeBrackets(String majorName) {
        if (majorName != null && !majorName.trim().isEmpty()) {
            return MAJOR_NAME_PATTERN.matcher(majorName).replaceAll("").trim();
        }
        return majorName;
    }
    
    /**
     * 模拟SQL LIKE匹配
     */
    public static boolean sqlLike(String text, String pattern) {
        if (text == null || pattern == null) {
            return false;
        }
        
        // 将SQL LIKE模式转换为正则表达式
        String regex = pattern.replace("%", ".*").replace("_", ".");
        return text.matches(regex);
    }
    
    /**
     * 模拟SUBSTRING_INDEX函数
     */
    public static String substringIndex(String str, String delimiter, int count) {
        if (str == null || delimiter == null) {
            return str;
        }
        
        int index = str.indexOf(delimiter);
        if (index == -1 || count <= 0) {
            return str;
        }
        
        return str.substring(0, index);
    }
    
    /**
     * 测试专业名称匹配
     */
    public static boolean testMajorNameMatch(String inputMajorName, String dbMajorName) {
        System.out.println("\n=== 测试匹配 ===");
        System.out.println("输入专业名称: " + inputMajorName);
        System.out.println("数据库专业名称: " + dbMajorName);
        
        final String finalMajorName = inputMajorName;
        final String cleanName = removeBrackets(inputMajorName);
        
        System.out.println("去括号后的名称: " + cleanName);
        
        boolean match1 = false, match2 = false, match3 = false;
        
        // 1. 直接使用简单的模糊匹配
        String pattern1 = "%" + finalMajorName + "%";
        match1 = sqlLike(dbMajorName, pattern1);
        System.out.println("匹配1 - 直接匹配: " + dbMajorName + " LIKE " + pattern1 + " = " + match1);
        
        // 2. 如果专业名称包含括号，也匹配去除括号后的名称
        if (!cleanName.equals(finalMajorName) && cleanName != null && !cleanName.trim().isEmpty()) {
            String pattern2 = "%" + cleanName + "%";
            match2 = sqlLike(dbMajorName, pattern2);
            System.out.println("匹配2 - 去括号匹配: " + dbMajorName + " LIKE " + pattern2 + " = " + match2);
        }
        
        // 3. 双向匹配：数据库中的专业名称包含输入的去括号名称
        String dbCleanName = substringIndex(dbMajorName, "(", 1);
        String pattern3 = "%" + cleanName + "%";
        match3 = sqlLike(dbCleanName, pattern3);
        System.out.println("匹配3 - 双向匹配: " + dbCleanName + " LIKE " + pattern3 + " = " + match3);
        
        boolean finalResult = match1 || match2 || match3;
        System.out.println("最终匹配结果: " + finalResult);
        
        return finalResult;
    }
    
    public static void main(String[] args) {
        System.out.println("=== 专业名称匹配测试 ===");
        
        // 测试用例1：您提到的情况
        testMajorNameMatch("康复治疗学(医学院，咸嘉湖校区)", "康复治疗学");
        
        // 测试用例2：反向情况
        testMajorNameMatch("康复治疗学", "康复治疗学(医学院，咸嘉湖校区)");
        
        // 测试用例3：完全匹配
        testMajorNameMatch("计算机科学与技术", "计算机科学与技术");
        
        // 测试用例4：括号内专业匹配
        testMajorNameMatch("计算机类(计算机科学与技术、软件工程)", "计算机科学与技术");
        
        // 测试用例5：部分匹配
        testMajorNameMatch("计算机", "计算机科学与技术");
        
        // 测试用例6：不匹配
        testMajorNameMatch("医学", "计算机科学与技术");
        
        System.out.println("\n=== 测试完成 ===");
    }
}
